#!/bin/bash

source /etc/profile
#获取spark文件路径


#获取节点
hosts=($(cat /etc/hosts | grep -Ev "(^$|^#|localhost)" | awk '{print $2}'))

#移动文件
cp $SPARK_HOME/conf/workers.template $SPARK_HOME/conf/workers
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
cp $SPARK_HOME/conf/log4j2.properties.template $SPARK_HOME/conf/log4j2.properties
#spark-env
spark_env=$(cat << EOF

JAVA_HOME=${JAVA_HOME}
## HADOOP 软件配置文件目录，读取 HDFS 上文件和运行 YARN 集群
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop/
YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop/
 
## 指定 spark 老大 Master 的 IP 和提交任务的通信端口
# 告知 Spark 的 master 运行在哪个机器上
export SPARK_MASTER_HOST=${hosts[0]}
# 告知 spark master 的通讯端口
export SPARK_MASTER_PORT=7077
# 告知 spark master 的 webui 端口
SPARK_MASTER_WEBUI_PORT=8081
 
# worker cpu 可用核数
SPARK_WORKER_CORES=1
# worker 可用内存
SPARK_WORKER_MEMORY=1g
# worker 的工作通讯地址
SPARK_WORKER_PORT=7078
# worker 的 webui 地址
SPARK_WORKER_WEBUI_PORT=8082
 
## 设置历史服务器
# 配置的意思是将 spark 程序运行的历史日志，存到 hdfs 的 /sparklog 文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://${hosts[0]}:9000/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
 
# 如果 hadoop 集群是 HA，则需要用下面的设置。要使用则把注释去掉
#SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://mycluster/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
EOF
)

spark_default=$(cat << EOF
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://${hosts[0]}:9000/spark-event-log
EOF
)

echo $node > $SPARK_HOME/conf/workers

for node in "${hosts[@]}"
do
    echo $node >> $SPARK_HOME/conf/workers
done

printf "%s\n" "$spark_env"  >>  $SPARK_HOME/conf/spark-env.sh

printf "%s\n" "$spark_default" >> $SPARK_HOME/conf/spark-defaults.conf

sed -i 's/^rootLogger.level = .*/rootLogger.level = WARN/' $SPARK_HOME/conf/log4j2.properties
sed -i 's/rootLogger.appenderRef.stdout.ref\s*=.*/rootLogger.appenderRef.stdout.ref = console/' $SPARK_HOME/conf/log4j2.properties

echo -e "spark配置文件已加载!!!!!!!!!!!!!!!!!!!!!!"